/**
 * 文件名: es5-helpers.js
 * 用途: ES5兼容性工具函数 - 替代ES6原生方法
 * 💡 导入提示: 在WPS宏编辑器中导入时请重命名为: es5-helpers（不带.js后缀）
 */

/**
 * 字符串重复（替代 String.prototype.repeat）
 * @param {string} str 要重复的字符串
 * @param {number} count 重复次数
 * @returns {string} 重复后的字符串
 */
function repeatString(str, count) {
    let result = "";
    for (let i = 0; i < count; i++) {
        result += str;
    }
    return result;
}

/**
 * 数组包含检查（替代 Array.prototype.includes）
 * @param {Array} arr 数组
 * @param {*} item 要查找的元素
 * @returns {boolean} 是否包含
 */
function arrayContains(arr, item) {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] === item) {
            return true;
        }
    }
    return false;
}

/**
 * 字符串包含检查（替代 String.prototype.includes）
 * @param {string} str 字符串
 * @param {string} search 要查找的子字符串
 * @returns {boolean} 是否包含
 */
function stringContains(str, search) {
    return str.indexOf(search) !== -1;
}

/**
 * 数组过滤（替代 Array.prototype.filter）
 * @param {Array} arr 数组
 * @param {function} callback 过滤回调函数
 * @returns {Array} 过滤后的数组
 */
function arrayFilter(arr, callback) {
    let result = [];
    for (let i = 0; i < arr.length; i++) {
        if (callback(arr[i], i, arr)) {
            result.push(arr[i]);
        }
    }
    return result;
}

/**
 * 获取对象键数组（替代 Object.keys）
 * @param {object} obj 对象
 * @returns {Array} 键数组
 */
function getObjectKeys(obj) {
    let keys = [];
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            keys.push(key);
        }
    }
    return keys;
}

/**
 * 字符串去空格（替代 String.prototype.trim）
 * @param {string} str 字符串
 * @returns {string} 去空格后的字符串
 */
function stringTrim(str) {
    return str.replace(/^\s+|\s+$/g, '');
}

/**
 * 数组去重（替代 [...new Set(arr)]）
 * @param {Array} arr 数组
 * @returns {Array} 去重后的数组
 */
function arrayUnique(arr) {
    let result = [];
    for (let i = 0; i < arr.length; i++) {
        if (!arrayContains(result, arr[i])) {
            result.push(arr[i]);
        }
    }
    return result;
}

// 全局导出 (Node.js测试环境支持)
if (typeof global !== 'undefined') {
    global.repeatString = repeatString;
    global.arrayContains = arrayContains;
    global.stringContains = stringContains;
    global.arrayFilter = arrayFilter;
    global.getObjectKeys = getObjectKeys;
    global.stringTrim = stringTrim;
    global.arrayUnique = arrayUnique;
}
